home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / win-fort.zip / DIGIT.FOR < prev    next >
Text File  |  1991-11-09  |  10KB  |  203 lines

  1. $DEFINE GDI
  2. $DEFINE USER
  3.       INCLUDE 'WINDOWS.FI'
  4.       SUBROUTINE DIGIT(IX,IY,IDIGIT,ZFIRST,IZY)
  5.       IMPLICIT NONE
  6. C
  7. C Author       : Kevin Black
  8. C Date written : February 1986
  9. C Abstract     :
  10. C
  11. C Subroutine to one of the numerical digits on the clock face. The data used
  12. C to generate the digits is from the Hershey character set.
  13. C
  14. C Arguments
  15. C
  16.       INTEGER*2 IX,IY,IDIGIT,IZY      ! Digit to draw and positioning
  17.       LOGICAL ZFIRST                  ! True for first digit of digit pair
  18. C
  19. C Local parameters, variables and function declarations
  20. C
  21.       INCLUDE 'WINDOWS.FD'            ! Include windows functions and parameters
  22.       INCLUDE 'FWCLOCK.FD'            ! Include FWClock variables and parameters
  23.       REAL SCALE                      ! Scaling factor
  24.       INTEGER IOP,IVLR,IV             ! Data table indexing
  25.       INTEGER*2 ITX,ITY               ! Coordinates for drawing
  26.       LOGICAL FIRST                   ! First digit control flag
  27.       INTEGER*2 CSTART(10)            ! Character data index
  28.       BYTE CDATA(2,530)               ! Character data
  29.       BYTE ZERO(90),ONE(60),TWO(100),THREE(120),FOUR(90)
  30.       BYTE FIVE(110),SIX(120),SEVEN(80),EIGHT(150),NINE(130)
  31.       EQUIVALENCE (CDATA(1,1) ,ZERO)  ,(CDATA(1,46) ,ONE),
  32.      *            (CDATA(1,76),TWO)   ,(CDATA(1,126),THREE),
  33.      *            (CDATA(1,186),FOUR) ,(CDATA(1,231),FIVE),
  34.      *            (CDATA(1,286),SIX)  ,(CDATA(1,346),SEVEN),
  35.      *            (CDATA(1,386),EIGHT),(CDATA(1,461),NINE)
  36. C
  37. C Data for index to start position in character data of each character
  38. C
  39.       DATA CSTART/   1,  46,  76, 126, 186, 231, 286, 346, 386, 461/
  40. C
  41. C Character data
  42. C
  43.       DATA ZERO/
  44.      *             -10,  10,  -6, -10,  -6,   6,  -8,   7, -64,   0,
  45.      *              -5,  -9,  -5,   6,  -2,   8, -64,   0,  -4, -10,
  46.      *              -4,   6,  -2,   7,  -1,   8, -64,   0,  -6, -10,
  47.      *              -4, -10,   1, -11,   3, -12, -64,   0,   1, -11,
  48.      *               2, -10,   4,  -9,   4,   7, -64,   0,   2, -11,
  49.      *               5,  -9,   5,   6, -64,   0,   3, -12,   4, -11,
  50.      *               6, -10,   8, -10,   6,  -9,   6,   7, -64,   0,
  51.      *              -8,   7,  -6,   7,  -4,   8,  -3,   9,  -1,   8,
  52.      *               4,   7,   6,   7, -64, -64,   0,   0,   0,   0/
  53.       DATA ONE/
  54.      *             -10,  10,  -3, -10,  -2,  -9,  -1,  -7,  -1,   6,
  55.      *              -3,   7, -64,   0,  -1,  -9,  -2, -10,  -1, -11,
  56.      *               0,  -9,   0,   7,   2,   8, -64,   0,  -3, -10,
  57.      *               0, -12,   1, -10,   1,   6,   3,   7,   4,   7,
  58.      *             -64,   0,  -3,   7,  -2,   7,   0,   8,   1,   9,
  59.      *               2,   8,   4,   7, -64, -64,   0,   0,   0,   0/
  60.       DATA TWO/
  61.      *             -10,  10,  -6, -10,  -4, -10,  -2, -11,  -1, -12,
  62.      *               1, -11,   4, -10,   6, -10, -64,   0,  -2, -10,
  63.      *               0, -11, -64,   0,  -6, -10,  -4,  -9,  -2,  -9,
  64.      *               0, -10,   1, -11, -64,   0,   4, -10,   4,  -2,
  65.      *             -64,   0,   5,  -9,   5,  -3, -64,   0,   6, -10,
  66.      *               6,  -2,  -1,  -2,  -4,  -1,  -6,   1,  -7,   4,
  67.      *              -7,   9, -64,   0,  -7,   9,  -3,   7,   1,   6,
  68.      *               4,   6,   8,   7, -64,   0,  -4,   8,  -1,   7,
  69.      *               4,   7,   7,   8, -64,   0,  -7,   9,  -2,   8,
  70.      *               3,   8,   6,   9,   8,   7, -64, -64,   0,   0/
  71.       DATA THREE/
  72.      *             -10,  10,  -6, -10,  -5, -10,  -3, -11,  -2, -12,
  73.      *               0, -11,   4, -10,   6, -10, -64,   0,  -3, -10,
  74.      *              -1, -11, -64,   0,  -6, -10,  -4,  -9,  -2,  -9,
  75.      *               0, -11, -64,   0,   4, -10,   4,  -3, -64,   0,
  76.      *               5,  -9,   5,  -4, -64,   0,   6, -10,   6,  -3,
  77.      *               4,  -3,   1,  -2,  -1,  -1, -64,   0,  -1,  -2,
  78.      *               1,  -1,   4,   0,   6,   0,   6,   7, -64,   0,
  79.      *               5,   1,   5,   6, -64,   0,   4,   0,   4,   7,
  80.      *             -64,   0,  -7,   7,  -5,   6,  -3,   6,  -1,   7,
  81.      *               0,   8, -64,   0,  -3,   7,  -1,   8, -64,   0,
  82.      *              -7,   7,  -5,   7,  -3,   8,  -2,   9,   0,   8,
  83.      *               4,   7,   6,   7, -64, -64,   0,   0,   0,   0/
  84.       DATA FOUR/
  85.      *             -10,  10,   3, -12,  -7,  -2,  -7,   3,   2,   3,
  86.      *             -64,   0,   4,   3,   8,   3,   9,   4,   9,   2,
  87.      *               8,   3, -64,   0,  -6,  -2,  -6,   2, -64,   0,
  88.      *              -5,  -4,  -5,   3, -64,   0,   2, -11,   2,   6,
  89.      *               0,   7, -64,   0,   3,  -8,   4, -10,   3, -11,
  90.      *               3,   7,   5,   8, -64,   0,   3, -12,   5, -10,
  91.      *               4,  -8,   4,   6,   6,   7,   7,   7, -64,   0,
  92.      *               0,   7,   1,   7,   3,   8,   4,   9,   5,   8,
  93.      *               7,   7, -64, -64,   0,   0,   0,   0,   0,   0/
  94.       DATA FIVE/
  95.      *             -10,  10,  -6, -12,  -6,  -3, -64,   0,  -6, -12,
  96.      *               6, -12, -64,   0,  -5, -11,   4, -11, -64,   0,
  97.      *              -6, -10,   3, -10,   5, -11,   6, -12, -64,   0,
  98.      *               4,  -6,   3,  -5,   1,  -4,  -3,  -3,  -6,  -3,
  99.      *             -64,   0,   1,  -4,   2,  -4,   4,  -3,   4,   7,
  100.      *             -64,   0,   3,  -5,   5,  -4,   5,   6, -64,   0,
  101.      *               4,  -6,   5,  -5,   7,  -4,   8,  -4,   6,  -3,
  102.      *               6,   7, -64,   0,  -7,   7,  -5,   6,  -3,   6,
  103.      *              -1,   7,   0,   8, -64,   0,  -3,   7,  -1,   8,
  104.      *             -64,   0,  -7,   7,  -5,   7,  -3,   8,  -2,   9,
  105.      *               0,   8,   4,   7,   6,   7, -64, -64,   0,   0/
  106.       DATA SIX/
  107.      *             -10,  10,  -6, -10,  -6,   6,  -8,   7, -64,   0,
  108.      *              -5,  -9,  -5,   6,  -2,   8, -64,   0,  -4, -10,
  109.      *              -4,   6,  -2,   7,  -1,   8, -64,   0,  -6, -10,
  110.      *              -4, -10,   0, -11,   2, -12,   3, -11,   5, -10,
  111.      *               6, -10, -64,   0,   1, -11,   3, -10, -64,   0,
  112.      *               0, -11,   2,  -9,   4,  -9,   6, -10, -64,   0,
  113.      *              -4,  -2,  -3,  -2,   1,  -3,   3,  -4,   4,  -5,
  114.      *             -64,   0,   1,  -3,   2,  -3,   4,  -2,   4,   7,
  115.      *             -64,   0,   3,  -4,   5,  -2,   5,   6, -64,   0,
  116.      *               4,  -5,   5,  -4,   7,  -3,   8,  -3,   6,  -2,
  117.      *               6,   7, -64,   0,  -8,   7,  -6,   7,  -4,   8,
  118.      *              -3,   9,  -1,   8,   4,   7,   6,   7, -64, -64/
  119.       DATA SEVEN/
  120.      *             -10,  10,  -7, -10,  -5, -12,  -2, -11,   3, -11,
  121.      *               8, -12, -64,   0,  -6, -11,  -3, -10,   2, -10,
  122.      *               5, -11, -64,   0,  -7, -10,  -3,  -9,   0,  -9,
  123.      *               4, -10,   8, -12, -64,   0,   8, -12,   7, -10,
  124.      *               5,  -7,   1,  -3,  -1,   0,  -2,   3,  -2,   6,
  125.      *              -1,   9, -64,   0,   0,  -1,  -1,   2,  -1,   5,
  126.      *               0,   8, -64,   0,   3,  -5,   1,  -2,   0,   1,
  127.      *               0,   4,   1,   7,  -1,   9, -64, -64,   0,   0/
  128.       DATA EIGHT/
  129.      *             -10,  10,  -6,  -9,  -6,  -3, -64,   0,  -5,  -8,
  130.      *              -5,  -4, -64,   0,  -4,  -9,  -4,  -3, -64,   0,
  131.      *              -6,  -9,  -4,  -9,   1, -10,   3, -11,   4, -12,
  132.      *             -64,   0,   1, -10,   2, -10,   4,  -9,   4,  -3,
  133.      *             -64,   0,   3, -11,   5, -10,   5,  -4, -64,   0,
  134.      *               4, -12,   5, -11,   7, -10,   8, -10,   6,  -9,
  135.      *               6,  -3, -64,   0,  -6,  -3,  -4,  -3,   4,   0,
  136.      *               6,   0, -64,   0,   6,  -3,   4,  -3,  -4,   0,
  137.      *              -6,   0, -64,   0,  -6,   0,  -6,   6,  -8,   7,
  138.      *             -64,   0,  -5,   1,  -5,   6,  -2,   8, -64,   0,
  139.      *              -4,   0,  -4,   6,  -2,   7,  -1,   8, -64,   0,
  140.      *               4,   0,   4,   7, -64,   0,   5,   1,   5,   6,
  141.      *             -64,   0,   6,   0,   6,   7, -64,   0,  -8,   7,
  142.      *              -6,   7,  -4,   8,  -3,   9,  -1,   8,   4,   7,
  143.      *               6,   7, -64, -64,   0,   0,   0,   0,   0,   0/
  144.       DATA NINE/
  145.      *             -10,  10,  -6, -10,  -6,  -1,  -8,   0, -64,   0,
  146.      *              -5,  -9,  -5,   0,  -3,   1, -64,   0,  -4, -10,
  147.      *              -4,  -1,  -2,   0,  -1,   0, -64,   0,  -6, -10,
  148.      *              -4, -10,   1, -11,   3, -12, -64,   0,   1, -11,
  149.      *               2, -10,   4,  -9,   4,   7, -64,   0,   2, -11,
  150.      *               5,  -9,   5,   6, -64,   0,   3, -12,   4, -11,
  151.      *               6, -10,   8, -10,   6,  -9,   6,   7, -64,   0,
  152.      *              -8,   0,  -7,   0,  -5,   1,  -4,   2,  -3,   1,
  153.      *              -1,   0,   3,  -1,   4,  -1, -64,   0,  -7,   7,
  154.      *              -5,   6,  -3,   6,  -1,   7,   0,   8, -64,   0,
  155.      *              -3,   7,  -1,   8, -64,   0,  -7,   7,  -5,   7,
  156.      *              -3,   8,  -2,   9,   0,   8,   4,   7,   6,   7,
  157.      *             -64, -64,   0,   0,   0,   0,   0,   0,   0,   0/
  158. C
  159. C Compute scaling, initialise for digit time and get initial character
  160. C data indexing information
  161. C
  162.       SCALE=FLOAT(RADIUS)/175.0
  163.       FIRST=ZFIRST
  164.       IX=IX+SCALE*FLOAT(IZY)
  165.       IOP=1
  166.       IVLR=CSTART(IDIGIT+1)
  167.       IV=IVLR+1
  168.       IOP=1
  169.       IF(.NOT.FIRST)IX=IX-INT(FLOAT(CDATA(1,IVLR))*SCALE)
  170.       FIRST=.FALSE.
  171. C
  172. C Loop through all the data for the digit and draw/move the pen as
  173. C indicated to draw the character
  174. C
  175. 20    ITX=CDATA(1,IV)
  176.       ITY=CDATA(2,IV)
  177.       IF(ITX.EQ.-64)THEN
  178.          IF(ITY.EQ.-64)THEN
  179.             IX=IX+INT(FLOAT(CDATA(2,IVLR))*SCALE)
  180.             RETURN
  181.          ELSE
  182.             IF(ITY.EQ.0)THEN
  183.                IOP=1
  184.                IV=IV+1
  185.                GOTO 20
  186.             ELSE
  187.                CALL FatalAppExit(0,'FWClock fatal error in DIGIT'C)
  188.                RETURN ! Catch all, there should be no return from FatalAppExit
  189.             ENDIF
  190.          ENDIF
  191.       ENDIF
  192.       ITX=IX+INT(FLOAT(ITX)*SCALE)
  193.       ITY=IY+INT(FLOAT(ITY)*SCALE)
  194.       IF(IOP.EQ.1)THEN
  195.          WSTATUS=MoveTo(FWCPS.HDC,ITX,ITY)
  196.          IOP=2
  197.       ELSE
  198.           WSTATUS=LineTo(FWCPS.HDC,ITX,ITY)
  199.       ENDIF
  200.       IV=IV+1
  201.       GOTO 20
  202.       END
  203.